package jnpf.database.datatype.sync.enums;

import jnpf.database.datatype.db.*;
import jnpf.database.datatype.db.interfaces.DtInterface;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 固定转换关系
 *
 * @author JNPF开发平台组 YanYu
 * @version V3.3
 * @copyright 引迈信息技术有限公司
 * @date 2022-05-31
 */
@Getter
@AllArgsConstructor
public enum DtConvertFixEnum{
    /*================================== 整数型 ========================================*/
    TINY_INT ("tinyint", new DtInterface[]{
            DtMySQLEnum.TINY_INT,
            DtOracleEnum.NUMBER,
            DtSQLServerEnum.TINY_INT,
            DtDMEnum.TINY_INT,
            DtKingbaseESEnum.TINY_INT,
            DtPostgreSQLEnum.INT2
    }),
    SMALL_INT("smallint", new DtInterface[]{
            DtMySQLEnum.SMALL_INT,
            DtOracleEnum.NUMBER,
            DtSQLServerEnum.SMALL_INT,
            DtDMEnum.SMALL_INT,
            DtKingbaseESEnum.SMALL_INT,
            DtPostgreSQLEnum.INT2
    }),
    INT("int", new DtInterface[]{
            DtMySQLEnum.INT,
            DtOracleEnum.NUMBER,
            DtSQLServerEnum.INT,
            DtDMEnum.INT,
            DtKingbaseESEnum.INTEGER,
            DtPostgreSQLEnum.INT4
    }),
    BIGINT("bigint", new DtInterface[]{
            DtMySQLEnum.BIGINT,
            DtOracleEnum.NUMBER,
            DtSQLServerEnum.BIGINT,
            DtDMEnum.BIGINT,
            DtKingbaseESEnum.BIGINT,
            DtPostgreSQLEnum.INT8
    }),
    /* =============================== 文本字符串类型:  =============================== */
    CHAR("char", new DtInterface[]{
            DtMySQLEnum.CHAR,
            DtOracleEnum.CHAR,
            DtSQLServerEnum.CHAR,
            DtDMEnum.CHAR,
            DtKingbaseESEnum.CHAR,
            DtPostgreSQLEnum.CHAR
    }),
    VARCHAR("varchar", new DtInterface[]{
            DtMySQLEnum.VARCHAR,
            DtOracleEnum.VARCHAR2,
            DtSQLServerEnum.VARCHAR,
            DtDMEnum.VARCHAR,
            DtKingbaseESEnum.VARCHAR,
            DtPostgreSQLEnum.VARCHAR
    }),
    NVARCHAR2("nvarchar2", new DtInterface[]{
            DtMySQLEnum.VARCHAR,
            DtOracleEnum.NVARCHAR2,
            DtSQLServerEnum.NVARCHAR,
            DtDMEnum.VARCHAR2,
            DtKingbaseESEnum.VARCHAR,
            DtPostgreSQLEnum.VARCHAR
    }),

    TEXT("text", new DtInterface[]{
            DtMySQLEnum.TEXT,
            DtOracleEnum.CLOB,
            DtSQLServerEnum.TEXT,
            DtDMEnum.TEXT,
            DtKingbaseESEnum.TEXT,
            DtPostgreSQLEnum.TEXT
    }),
    NCLOB("NCLOB", new DtInterface[]{
            DtMySQLEnum.TEXT,
            DtOracleEnum.NCLOB,
            DtSQLServerEnum.N_TEXT,
            DtDMEnum.CLOB,
            DtKingbaseESEnum.TEXT,
            DtPostgreSQLEnum.TEXT
    }),
    FLOAT("float", new DtInterface[]{
            DtMySQLEnum.FLOAT,
            DtDMEnum.FLOAT,
            DtOracleEnum.FLOAT,
            DtSQLServerEnum.FLOAT,
            DtKingbaseESEnum.FLOAT4,
            DtPostgreSQLEnum.FLOAT4
    }),
    DOUBLE("double", new DtInterface[]{
            DtMySQLEnum.DOUBLE,
            DtOracleEnum.FLOAT,
            DtSQLServerEnum.FLOAT,
            DtDMEnum.DOUBLE,
            DtKingbaseESEnum.FLOAT8,
            DtPostgreSQLEnum.FLOAT8
    }),
    DECIMAL("decimal", new DtInterface[]{
            DtMySQLEnum.DECIMAL,
            DtOracleEnum.NUMBER,
            DtSQLServerEnum.DECIMAL,
            DtDMEnum.DECIMAL,
            DtKingbaseESEnum.NUMERIC,
            DtPostgreSQLEnum.NUMERIC
    }),

    DATE("date", new DtInterface[]{
            DtMySQLEnum.DATE,
            DtSQLServerEnum.DATE,
            DtOracleEnum.DATE,
            DtDMEnum.DATE,
            DtKingbaseESEnum.DATE,
            DtPostgreSQLEnum.DATE
    }),
    DATE_TIME("datetime", new DtInterface[]{
            DtMySQLEnum.DATE_TIME,
            DtOracleEnum.TIMESTAMP,
            DtSQLServerEnum.DATE_TIME,
            DtDMEnum.DATE_TIME,
            DtKingbaseESEnum.DATE_TIME,
            DtPostgreSQLEnum.TIMESTAMP
    }),

    TIME("time", new DtInterface[]{
            DtMySQLEnum.TIME,
            DtOracleEnum.TIMESTAMP,
            DtSQLServerEnum.TIME,
            DtDMEnum.TIME,
            DtKingbaseESEnum.TIME,
            DtPostgreSQLEnum.TIME
    }),
    TIMESTAMP("timestamp", new DtInterface[]{
            DtMySQLEnum.TIMESTAMP,
            DtOracleEnum.TIMESTAMP,
            DtSQLServerEnum.TIMESTAMP,
            DtDMEnum.TIME_STAMP,
            DtKingbaseESEnum.TIMESTAMP,
            DtPostgreSQLEnum.TIMESTAMP
    }),
    ;
    private final String dataType;
    private final DtInterface[] dtMutualConverts;
}
